/*
 * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. Redistribution
 * and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met: -Redistributions of
 * source code must retain the above copyright notice, this list of conditions
 * and the following disclaimer. -Redistribution in binary form must reproduct
 * the above copyright notice, this list of conditions and the following
 * disclaimer in the documentation and/or other materials provided with the
 * distribution. Neither the name of Sun Microsystems, Inc. or the names of
 * contributors may be used to endorse or promote products derived from this
 * software without specific prior written permission. This software is provided
 * "AS IS," without a warranty of any kind. ALL EXPRESS OR IMPLIED CONDITIONS,
 * REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE
 * HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR
 * LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR RELATING TO USE,
 * MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT
 * WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
 * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES,
 * HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE
 * USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES. You acknowledge that Software is not designed,
 * licensed or intended for use in the design, construction, operation or
 * maintenance of any nuclear facility.
 */

/*
 * @(#)TableMap.java 1.11 03/01/23
 */

/**
 * In a chain of data manipulators some behaviour is common. TableMap provides
 * most of this behavour and can be subclassed by filters that only need to
 * override a handful of specific methods. TableMap implements TableModel by
 * routing all requests to its model, and TableModelListener by routing all
 * events to its listeners. Inserting a TableMap which has not been subclassed
 * into a chain of table filters should have no effect.
 * 
 * @version 1.11 01/23/03
 * @author Philip Milne
 */

package autoteam.tables;

import javax.swing.table.*;
import javax.swing.event.TableModelListener;
import javax.swing.event.TableModelEvent;

public class MapTableModel extends AbstractTableModel implements TableModelListener
{
    private static final long serialVersionUID = 7039152258424158115L;
    protected TableModel model;
    
    public TableModel getModel( )
    {
	return model;
    }
    
    public void setModel( TableModel model )
    {
	this.model = model;
	model.addTableModelListener( this );
    }
    
    // By default, Implement TableModel by forwarding all messages
    // to the model.
    
    public Object getValueAt( int aRow, int aColumn )
    {
	return model.getValueAt( aRow, aColumn );
    }
    
    public void setValueAt( Object aValue, int aRow, int aColumn )
    {
	model.setValueAt( aValue, aRow, aColumn );
    }
    
    public int getRowCount( )
    {
	return (model == null) ? 0 : model.getRowCount( );
    }
    
    public int getColumnCount( )
    {
	return (model == null) ? 0 : model.getColumnCount( );
    }
    
    public String getColumnName( int aColumn )
    {
	return model.getColumnName( aColumn );
    }
    
    public Class getColumnClass( int aColumn )
    {
	return model.getColumnClass( aColumn );
    }
    
    public boolean isCellEditable( int row, int column )
    {
	return model.isCellEditable( row, column );
    }
    
    //
    // Implementation of the TableModelListener interface,
    //
    
    // By default forward all events to all the listeners.
    public void tableChanged( TableModelEvent e )
    {
	fireTableChanged( e );
    }
}
